5.3.1 -
La gestion des
utilisateurs :
5.3.1.A - Contrôle et droits
d’accès :
Protéger les fichiers sur un système Unix revient à
les doter d’un ensemble de caractères spécifiques qui
permettront au système, à tout instant, de déterminer qui a
le droit de lire, qui a le droit d’écrire ou encore qui a le droit
d’exécuter ce fichier si ce dernier est un module
exécutable.
Le contrôle d’accès aux fichiers peut
être de deux types, discrétionnaire ou mandaté.
5.3.1.A.1 - Contrôle d’accès
discrétionnaire :
En cas de contrôle d’accès discrétionnaire (DAC :
Discretionnary access Control), l’utilisateur a la responsabilité
du choix de protection des fichiers. C’est un mode de contrôle qui
détermine l’accès aux fichiers en fonction de
l’identité de l’utilisateur à qui ils appartiennent.
Ce mode est donc fondé sur la notion de propriété. Le
propriétaire d’un fichier est l’utilisateur qui l’a
créé. Un fichier appartient donc à un utilisateur, et ce
dernier indique au système quels sont ceux qui auront les permissions
d’accès. Il y a en général trois types
d’accès :
- l’accès en lecture signifie qu’un utilisateur
donné a le droit de lire le contenu du fichier ;
- l’accès en écriture signifie qu’un utilisateur
ayant ce droit peut modifier le fichier ou encore le détruire ;
- le droit d’exécution signifie qu’un utilisateur a le
droit d’exécuter ce fichier, à condition toutefois
qu’il s’agisse d’un code exécutable par le
système.
Toutes les informations concernant le
propriétaire et les droits d’accès à un fichier
figurent dans l’en-tête de ce fichier ou dans un emplacement
particulier du système de fichiers contenant les caractéristiques
des fichiers.
Le monde des utilisateurs est en général
divisé en trois ensembles :
- user représente l’utilisateur lui-même, celui qui a
créé le fichier ;
- group représente le groupe d’utilisateurs,
c’est-à-dire un ensemble d’utilisateurs dont fait partie le
propriétaire du fichier ;
- other représente les autres ou encore le reste du
monde.
Sur UNIX, chaque utilisateur peut créer des fichiers
et des répertoires et appartient à un groupe. Il peut donc
partager des fichiers avec les autres membres de son groupe. Enfin, il peut,
s’il le désire, donner aux autres utilisateurs, quel que soit leur
groupe d’appartenance, le droit d’accéder à certains
de ses fichiers et de ses répertoires. Toutes ces autorisations
d’accès sont gérées par la mise en place de droits
d’accès aux fichiers et répertoires.
5.3.1.A.2 - Contrôle d’accès
mandaté :
En cas de contrôle d’accès mandaté (MAC :
Mandatory Access Control), ce sont les systèmes qui se chargent de la
protection des fichiers. Ce type de contrôle concerne essentiellement les
ordinateurs qui manipulent des données très sensibles du type
Secret Défense. Chaque objet existant dans un système donné
se voit affecté d’un code de sensibilité.
La notion
d’objet, prise au sens large, concerne aussi bien des fichiers, des
pilotes de périphériques, des répertoires ou des
fenêtres. Cette liste n’est pas exhaustive. Ces objets sont
manipulés par des acteurs, ou encore des sujets, qui sont
représentés par les divers utilisateurs et les divers programmes
que ces derniers utilisent. Chaque acteur est aussi doté d’un code
de sensibilité. Pour un utilisateur, ce code représentera le
degré de confiance qu’il est possible de lui accorder et, de ce
fait, le code de sensibilité associé à un fichier
représentera le degré de confiance que doit avoir un utilisateur
pour pouvoir y accéder, c’est-à-dire au moins le lire et au
plus le modifier.
A titre d’exemple, supposons que les fichiers F1 et
F2 soient affectés de la classification SECRET et que les fichiers F3 et
F4 soient affectés de la classification CONFIDENTIEL. Ces codes de
sensibilité sont évidemment ordonnés : TOP SECRET, SECRET,
CONFIDENTIEL, PUBLIC.
De manière similaire, l’utilisateur User1
est classé SECRET et l’utilisateur User2 est classé
CONFIDENTIEL. Alors l’utilisateur User1 aura accès aux fichiers F1,
F2, F3 et F4 puisque son degré de confiance est supérieur au code
de sensibilité des fichiers F3 et F4, et qu’il est égal au
code de sensibilité des fichiers F1 et F2. Par contre l’utilisateur
User2 n’aura pas accès aux fichiers F1 e F2, ne disposant pas
d’un degré de confiance suffisant pour ces informations. Il peut
cependant, suivant les cas, avoir seulement un accès en écriture ;
ce qui signifie qu’il peut compléter la base d’informations
de F1 et F2, sans pour autant avoir le droit d’aller lire ce que
d’autres utilisateurs, ayant le même degré de confiance que
lui, ont écrit.
D’autre part, l’utilisateur User1 peut
fort bien avoir le droit de lire les fichiers F1 et F2, sans pour autant avoir
le droit d’en modifier le contenu.
5.3.1.B - Accès au
système :
5.3.1.B.1 - Les identificateurs de
login :
Tout utilisateur d’un système Unix dispose d’un
identificateur (username) et d’un mot de passe (password). Ces deux
éléments combinés avec le répertoire d’accueil
représentent le point d’entrée ou compte (account)
d’une personne sur le système. Cela ne signifie pas qu’une
personne donnée ne puisse pas avoir plusieurs points
d’entrée dans le système, mais que chacun d’entre eux
correspondra à un identificateur différent. Un identificateur sur
Unix est toujours unique et sa longueur est comprise entre un et huit
caractères. Il est toujours préférable que cette longueur
soit supérieure à trois.
Le fichier
« /etc/passwd » est utilisé par le système
pour définir ses utilisateurs. Chaque ligne de ce fichier correspond
à un identificateur et décrit un certain nombre de
paramètres qui lui sont liés. Chaque paramètre de la ligne
est séparé du suivant par le caractère deux-points ( :
).
Le fichier « /etc/passwd » est accessible en lecture
à tous les utilisateurs du système.
Certains identificateurs de
login comme daemon, bin, sys ou uucp ne correspondent à aucun utilisateur
véritable et représentent des services permanents du
système. L’identificateur root correspond à
l’administrateur du système.
La structure d’une ligne de
ce fichier se présente sous la forme :
login :mot de passe :UID :GID
:nom :répertoire-accueil :shell
Par exemple :
marc
Identificateur.
iU8fT6/Dgf5Tbik Mot de passe chiffré.
1051
Numéro d’utilisateur : User Id ou UID.
1000 Numéro de
groupe de l’utilisateur : GID.
Marc Boget Nom réel de
l’utilisateur.
/users/marc Nom du répertoire
d’accueil.
/bin/sh Nom du shell à la connexion.
5.3.1.B.2 - Les mots de passe :
Il existe différentes manières pour un utilisateur de se
faire authentifier par un système informatique (empreinte digitale ou
vocale, carte à puce, mot de passe ...), le mot de passe est le
système d’authentification privilégié par les
systèmes Unix. Si cette technique n’est pas la plus sûre,
c’est certainement la plus simple à mettre en œuvre.
En
réponse à la procédure de connexion, le mot de passe est le
premier élément d’authentification demandé par le
système, c’est le moyen par lequel il saura que l’utilisateur
est bien celui qu’il prétend être, à moins qu’il
se soit fait voler son mot de passe.
Login : marc
Password : XXXXXX
En
général, un utilisateur a droit à plusieurs essais. La
tentative de connexion est cependant la plupart du temps conservée dans
un fichier de trace. Sur certains systèmes, le nombre de tentatives pour
un identificateur de login donné peut être limité ; lorsque
cette limite est atteinte, il devient impossible de se connecter avec cet
identificateur et seul l’administrateur du système peut redonner
l’accès à la machine.
5.3.1.B.2.a - Le chiffrement des mots de
passe :
Pour disposer d’un bon système de mots de passe, la
première règle consiste à ne jamais les écrire en
clair quel que soit le support susceptible d’être utilisé.
Les mots de passe cryptés sont effectivement conservés dans le
fichier « /etc/passwd » (ou le fichier
« /etc/shadow »), après avoir été
cryptés par la fonction crypt(). Ce mot de passe n’est jamais
déchiffré lors des connexions ultérieures ; en effet, la
procédure le login se contente de chiffrer le mot de passe qui lui est
fourni et de comparer le résultat avec le contenu du champ correspondant
du fichier « /etc/passwd ». La fonction crypt() utilise un
algorithme basé sur le DES (Data Encryption Standard) ou le MD5 (Message
Digest 5). Un mot de passe chiffré par cette fonction ne peut plus
être déchiffré, même en disposant du code source de la
fonction crypt(). Lorsqu’on n’a pas mis en œuvre une gestion
rigoureuse des mots de passe et de leur structure, une façon de
procéder pour pénétrer dans un système Unix consiste
à chiffrer tous les mots du dictionnaire et à vérifier si,
par hasard, il n’y en aurait pas un identique dans le fichier
« /etc/passwd ».
5.3.1.B.2.b - La gestion des mots de
passe :
Pour un utilisateur, un bon mot de passe est un mot facile à
retenir. Malheureusement, dans ce cas, ce qui est bon pour l’utilisateur
est très mauvais pour la sécurité du système. Il
existe différentes possibilités pour obliger les utilisateurs
à changer souvent de mot de passe et pour une durée minimale,
sinon il serait très facile de remettre tout de suite l’ancien mot
de passe. Dans les cas extrêmes, il est préférable
d’imposer le mot de passe aux utilisateurs, il sera soit
généré aléatoirement par le système, soit
décidé par l’administrateur lui-même. Le défaut
évident de cette technique est que les utilisateurs auront la plupart du
temps tendance à conserver leur mot de passe par écrit, puisque,
ne l’ayant pas choisi eux-mêmes, ils auront du mal à
s’en souvenir.
Les dernières versions d’Unix offrent aussi
la possibilité de conserver les mots de passe cryptés dans des
fichiers dits fantômes (shadow password file,
« /etc/shadow »). Ces fichiers fantômes ne sont
accessibles qu’à un tout petit nombre d’administrateurs afin
d’éviter leur lecture et éventuellement leur décodage
par comparaison avec un dictionnaire de mots cryptés.
5.3.1.B.3 - La gestion des
utilisateurs :
Les notions d’identificateur d’utilisateur (UID) ou de groupe
(GID) ont déjà été rencontrées. Il faut
maintenant en préciser la définition et l’usage.
Chaque
utilisateur d’un système Unix est doté d’un
identifiant numérique que l’on appelle l’UID en
abréviation de User-Identifier. Cet identifiant est un nombre codé
sur seize bits utilisé par le système pour identifier
l’utilisateur ; en principe, chaque utilisateur a un UID unique, mais le
système ne l’impose pas et, si deux utilisateurs ont le même
numéro d’UID, Unix les considérera comme une seule et
même personne, ce n’est pas très sain du point de vue de la
sécurité.
En règle générale, les UID dont
la valeur va de zéro (0) à neuf (9) sont réservés
aux tâches d’administration du système. Dans la plupart des
cas, l’administrateur du système fera commencer les UID des
utilisateurs à la valeur 50 ou 100, ou encore utilisera un facteur 10 ou
100 du numéro du groupe.
5.3.1.B.3.a - Les utilisateurs
usuels :
Il s’agit des différents utilisateurs standard que l’on
peut rencontrer sur la plupart des systèmes Unix. Les plus courants sont
les suivants :
C’est en principe le super-utilisateur
(UID 0), c’est celui qui a tous les droits et qui réalise
l’administration du système. Tout utilisateur ayant une valeur
d’UID égale à zéro est super-utilisateur, il faut
toujours se souvenir que c’est la valeur de l’UID qui permet au
système d’identifier un utilisateur et non pas son nom de
connexion.
Cet utilisateur a pour fonction
d’exécuter des processus systèmes du type serveurs comme
syslogd, rpc.statd, rpc.pcnfsd ...
Il est propriétaire de certains
programmes exécutables.
C’est l’utilisateur du
sous-système de copie de machine à machine (Unix to Unix copy
program). Il est le propriétaire de toutes les commandes du
sous-système uucp.
C’est un numéro
d’utilisateur utilisé par NFS.
5.3.1.B.3.b - L’administrateur du
système :
Le super-utilisateur est l’utilisateur dont l’UID a pour valeur
zéro ; en général il s’agit de root. C’est
l’utilisateur qui dispose de tous les droits sur le système,
c’est lui qui est propriétaire des fichiers sensibles et des
commandes systèmes. Cet identificateur de login est utilisé pour
mettre en œuvre les procédures de connexion et de
déconnexion, la gestion des périphériques
d’entrée/sortie, la gestion des numéros de
compte...
- - Les droits de l’administrateur du
système :
L’utilisateur root dispose de
nombreux droits, ces droits sont aussi attribués aux processus
initialisés par le super-utilisateur puisque ces processus ont alors une
valeur d’UID égale à zéro.
Le super-utilisateur
peut modifier les priorités d’exécution des processus, leur
envoyer des signaux (d’interception notamment), modifier les
paramètres d’exécution comme le temps CPU, la taille des
différents segments, le nombre de processus simultanés
autorisé. Il a aussi la responsabilité de la comptabilité
et des processus d’audit.
C’est aussi lui qui gère les
processus serveurs de réseaux ou de périphériques. Il a la
haute main sur tous les fichiers du système, sur les identifiants des
utilisateurs, etc.
Cependant, il existe un certain nombre d’actions
qu’il ne peut pas réaliser, comme déchiffrer les mots de
passe des utilisateurs ou modifier un système de fichier monté en
lecture.
5.3.1.B.4 - La gestion des groupes
d’utilisateurs :
Les utilisateurs font toujours partie d’au moins un groupe. Ces
groupes ont un numéro de groupe, le GID (Groupe Identifier), et en
général un nom. C’est l’administrateur du
système qui affecte les utilisateurs à un groupe ou à
plusieurs groupes. Lorsqu’il y a plusieurs groupes, il existe un groupe
privilégié, dit primaire, dont le numéro figure dans le
fichier « /etc/passwd ». Parmi ces groupes, il en existe qui
disposent de droits particuliers, ce sont en général des groupes
d’administration du système.
La répartition en groupes
permet de différencier les utilisateurs suivant leur activité,
suivant leurs droits.
Les différents groupes du système sont
définis dans le fichier « /etc/group ».
La
structure d’une ligne de ce fichier « /etc/group » se
présente de la façon suivante :
- le premier champ représente le nom du groupe.
- le second champ représentait à l’origine le mot de passe
du groupe, il n’a plus d’utilité et il est remplacé
par un astérisque.
- le troisième champ est le numéro du groupe,
c’est-à-dire le GID.
- le dernier champ représente la liste des membres du
groupe.
5.3.1.B.4.a - Les groupes usuels :
Il s’agit des différents groupes que l’on peut
rencontrer sur la plupart des systèmes Unix. Les plus courants sont les
suivants :
C’est en principe le groupe du
super-utilisateur (GID 0), c’est celui qui permet à ses membres de
devenir administrateur du système. Il porte aussi les noms de groupe
« wheel » ou groupe
« system ».
les membres de ce groupe sont les utilisateurs
du type daemon, il possède les droits d’accès sur le
répertoire « /var/spool », s’occupent de toutes
les commandes liées au réseau et au transfert de
données.
ce groupe est propriétaire des pilotes de
périphériques des terminaux.
5.3.1.C - Les modules PAM (Pluggable
Authentification Modules) :
Pour identifier un utilisateur à son arrivée, le
système demande un nom d’utilisateur (login), puis un mot de passe.
Ce mot de passe est ensuite chiffré, puis comparé avec celui
correspondant au login dans la base d'utilisateurs
« /etc/passwd » ou « /etc/shadow ». Le
problème de cette méthode « traditionnelle »
est la difficulté de changer la procédure. Par exemple dans le cas
simple où nous ne souhaitons autoriser les logins du root que sur les
deux premières consoles (tty1 et tty2), il est obligatoire de modifier
les sources des programmes concernés, avec tous les risques que cela
comporte.
Les Pluggable Authentification Modules sont destinés
à simplifier la vie de l’administrateur système. Ils
permettent de changer la politique d’authentification sans avoir à
recompiler le moindre programme. La seule chose à faire est de modifier
un fichier de configuration.
5.3.1.C.1 - Description des modules
PAM :
Comme son nom l’indique, PAM est constitué de modules. Ainsi,
pour chaque type de service, on peut définir le ou les modules de son
choix. Il existe quatre grandes familles de modules :
- modules auth : ils sont utilisés pour une authentification classique
(login et mot de passe).
- modules account : ils ont la charge de vérifier si
l’identification est autorisée (expiration de compte, plage horaire
de connexion).
- modules password : comme le nom l’indique, ils sont utilisés
pour vérifier les mots de passe.
- modules session : ils sont utilisés à l’intérieur
de la session de l’utilisateur (après authentification). Ils
permettent de contrôler par exemple l'accès aux répertoires
home et aux boîtes aux lettres.
Il est également
possible de combiner les modules pour obtenir les effets de son choix avec les
services de son choix. Chaque application utilisant PAM définit un
service. Ainsi, le programme login utilise le service login, ftpd le service
ftp, rlogin le service rlogin, etc.